package cn.yh.register.hosp.service;

import cn.yh.register.model.hosp.Schedule;
import cn.yh.register.vo.hosp.ScheduleOrderVo;
import cn.yh.register.vo.hosp.ScheduleQueryVo;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface ScheduleService {

    /**
     * 上传排班接口
     * @param objectMap  参数信息
     */
    void saveSchedule(Map<String, Object> objectMap);

    /**
     * 分页查询排班列表
     * 考虑到方法的复用性，接口文档中传递的是hoscode、page、limit
     * 如果要满足用其他条件也可以查，可以把查询条件封装成一个视图对象
     * @param queryvo   查询条件
     * @param page  页码
     * @param limit 每页条数
     * @return 排班列表分页数据
     */
    Page<Schedule> getScheduleList(ScheduleQueryVo queryvo, Integer page, Integer limit);

    /**
     * 删除医院排班信息
     * @param hoscode  医院编号
     * @param hosScheduleId  排班医院的唯一主键
     */
    void removeSchedule(String hoscode, String hosScheduleId);

    /**
     * 分页显示医院排班信息
     * @param hoscode  医院编号
     * @param depcode 科室编号
     * @param page 当前页
     * @param size 每页大小
     * @return 放在map集合中的排班信息
     */
    Map<String,Object> getHospSchedule(String hoscode,String depcode,Integer page,Integer size);

    /**
     * 获取排班详情信息
     * @param hoscode 医院编号
     * @param depcode 科室编号
     * @param workDate 排班日期
     * @return  排班详情信息
     */
    List<Schedule> getDetailSchedule(String hoscode,String depcode,String workDate);


    /**
     * 分页获取可预约的排班数据
     * @param page 当前页
     * @param size 页大小
     * @param hoscode 医院编号
     * @param depcode 科室编号
     * @return 预约信息
     */
    Map<String,Object> getBookingScheduleRule(Integer page,Integer size,String hoscode,String depcode);

    /**
     * 根据id获取排班信息
     * @param scheduleId 排班id
     * @return 排班信息
     */
    Schedule getSchedule(String scheduleId);

    /**
     * 获取预约下达所需要的排班数据
     * @param scheduleId 排班id
     * @return 预约下单需要的排班数据
     */
    ScheduleOrderVo getScheduleOrderVo(String scheduleId);

    /**
     * 更新排班信息
     * @param schedule  排班实体
     */
    void update(Schedule schedule);


    /**
     * 根据科室排班主键 查排班信息
     * @param hosScheduleId 排班主键
     * @return 科室排班信息
     */
    Schedule getByHosScheduleId(String hosScheduleId);
}
